const fs = require('fs');
const path = require('path');

// 读取 package.json 和 app.json
const packagePath = path.join(__dirname, '..', 'package.json');
const appJsonPath = path.join(__dirname, '..', 'app.json');

const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
const appJson = JSON.parse(fs.readFileSync(appJsonPath, 'utf8'));

// 获取版本类型参数
const versionType = process.argv[2]; // 'patch', 'minor', 'major'

if (!versionType || !['patch', 'minor', 'major'].includes(versionType)) {
  console.error('请指定版本类型: patch, minor, 或 major');
  console.log('用法: node scripts/version.js [patch|minor|major]');
  process.exit(1);
}

// 从 package.json 或 app.json 获取当前版本号（优先使用 package.json）
const currentVersion = packageJson.version || appJson.expo?.version || '0.1.0';

// 解析当前版本号
const versionParts = currentVersion.split('.');
let major = parseInt(versionParts[0]);
let minor = parseInt(versionParts[1]);
let patch = parseInt(versionParts[2]);

// 根据类型更新版本号
switch (versionType) {
  case 'major':
    major++;
    minor = 0;
    patch = 0;
    break;
  case 'minor':
    minor++;
    patch = 0;
    break;
  case 'patch':
    patch++;
    break;
}

// 生成新版本号
const newVersion = `${major}.${minor}.${patch}`;

// 更新 package.json
packageJson.version = newVersion;
fs.writeFileSync(packagePath, JSON.stringify(packageJson, null, 2) + '\n');

// 更新 app.json
if (appJson.expo) {
  appJson.expo.version = newVersion;
  fs.writeFileSync(appJsonPath, JSON.stringify(appJson, null, 2) + '\n');
}

console.log(`版本号已更新: ${currentVersion} -> ${newVersion}`);
console.log(`版本类型: ${versionType}`);
console.log(`已更新文件: package.json, app.json`);

